// user_database.cpp（用户业务逻辑实现）
#include "user_database.h"
#include <QSqlError>
#include <QDebug>

UserDatabase::UserDatabase(DatabaseConnection *dbConnection, QObject *parent)
    : QObject(parent), dbConnection(dbConnection)
{}

int UserDatabase::verifyLogin(const QString &username, const QString &password) {
    QSqlDatabase db = dbConnection->database();
    QSqlQuery query(db);

    // 参数化查询（防止SQL注入）
    QString sql = "SELECT password,id FROM users WHERE username = :username";
    query.prepare(sql);
    query.bindValue(":username", username);

    if (!query.exec()) {
        qDebug() << "【用户数据库】登录查询失败：" << query.lastError().text();
        return -1;
    }

    // 处理查询结果
    if (query.next()) {
        QString storedPassword = query.value(0).toString();
        if(storedPassword == password){
            return query.value(1).toInt();
        }
    }
    return -1; // 用户不存在
}

bool UserDatabase::Register(const QString &username, const QString &password) {
    QSqlDatabase db = dbConnection->database();
    QSqlQuery query(db);

    // 先检查用户名是否已存在
    QString checkSql = "SELECT id FROM users WHERE username = :username";
    query.prepare(checkSql);
    query.bindValue(":username", username);

    if (!query.exec()) {
        qDebug() << "【用户数据库】检查用户名是否存在时查询失败：" << query.lastError().text();
        return false;
    }

    if (query.next()) {
        qDebug() << "【用户数据库】注册失败，用户名已存在：" << username;
        return false; // 用户名已存在
    }

    // 插入新用户
    QString insertSql = "INSERT INTO users (username, password) VALUES (:username, :password)";
    query.prepare(insertSql);
    query.bindValue(":username", username);
    query.bindValue(":password", password);

    if (!query.exec()) {
        qDebug() << "【用户数据库】注册插入新用户时失败：" << query.lastError().text();
        return false;
    }

    qDebug() << "【用户数据库】用户注册成功：" << username;
    return true;
}

int UserDatabase::getIdByName(const QString &username) {
    QSqlDatabase db = dbConnection->database();
    QSqlQuery query(db);

    // 参数化查询（防止 SQL 注入）
    QString sql = "SELECT id FROM users WHERE username = :username";
    query.prepare(sql);
    query.bindValue(":username", username);

    if (!query.exec()) {
        qDebug() << "【用户数据库】根据用户名获取用户 ID 时查询失败：" << query.lastError().text();
        return -1;
    }

    if (query.next()) {
        qDebug() << "【用户数据库】找到用户名对应的用户：" << username;
        return query.value(0).toInt();
    }

    qDebug() << "【用户数据库】未找到用户名对应的用户：" << username;
    return -1;
}
QString UserDatabase::getNameById(int userId) {
    QSqlDatabase db = dbConnection->database();
    QSqlQuery query(db);

    // 参数化查询（防止 SQL 注入）
    QString sql = "SELECT username FROM users WHERE id = :userId";
    query.prepare(sql);
    query.bindValue(":userId", userId);

    if (!query.exec()) {
        qDebug() << "【用户数据库】根据用户 ID 获取用户名时查询失败：" << query.lastError().text();
        return "";
    }

    if (query.next()) {
        return query.value(0).toString();
    }

    qDebug() << "【用户数据库】未找到用户 ID 对应的用户：" << userId;
    return "";
}


